//
// Point.hpp for  in ~/Dropbox/Projets/raytracer-2016/Includes/Maths/
//
// Made by Jonathan
// Login   <ledey_l@epitech.net>
//
// Started on  Sun Sep 22 13:21:02 2013 Jonathan
// Last update Sun Sep 22 16:29:13 2013 Jonathan
//

#ifndef			POINT_HPP_
# define		POINT_HPP_

# include		<cmath>

namespace		Maths
{
  class			Matrix;
  class			Vector;

  class			Point
  {
  private:
    long double		mX;
    long double		mY;
    long double		mZ;

  protected:

  public:
    Point(void);
    Point(long double rValue);
    Point(long double rX, long double rY, long double rZ = 0.0f);
    Point(Point const &rOther);
    Point		&operator=(Point const &rOther);
    ~Point(void);

    Point		operator-(void) const;
    Vector		operator-(Point const &rOther) const;
    Point		operator-(Vector const &rVector) const;
    Point		operator+(Vector const &rVector) const;
    Point		operator*(long double rValue) const;
    long double		operator[](int rIndex) const;
    long double		Distance(Point const &rOther) const;
    long double		Distance_Squared(Point const &rOther) const;
  };

  Point			operator*(Matrix const &rMatrix, Point const &rPoint);
};

#endif			/* POINT_HPP_ */
